package com.lekang.le.service.impl;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Random;

import com.lekang.common.core.domain.entity.SysUser;
import com.lekang.common.utils.DateUtils;
import com.lekang.le.domain.ElderlySzh;
import com.lekang.le.mapper.ElderlySzhMapper;
import com.lekang.system.mapper.SysUserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.lekang.le.mapper.PrepaymentRechargeMapper;
import com.lekang.le.domain.PrepaymentRecharge;
import com.lekang.le.service.IPrepaymentRechargeService;

/**
 * 预存款充值Service业务层处理
 * 
 * @author yyh
 * @date 2025-10-14
 */
@Service
public class PrepaymentRechargeServiceImpl implements IPrepaymentRechargeService 
{
    @Autowired
    private PrepaymentRechargeMapper prepaymentRechargeMapper;
    @Autowired
    private ElderlySzhMapper elderlySzhMapper;
    @Autowired
    private SysUserMapper sysUserMapper;



    /**
     * 查询预存款充值
     * 
     * @param id 预存款充值主键
     * @return 预存款充值
     */
    @Override
    public PrepaymentRecharge selectPrepaymentRechargeById(Long id)
    {
        return prepaymentRechargeMapper.selectPrepaymentRechargeById(id);
    }

    /**
     * 查询预存款充值列表
     * 
     * @param prepaymentRecharge 预存款充值
     * @return 预存款充值
     */
    @Override
    public List<PrepaymentRecharge> selectPrepaymentRechargeList(PrepaymentRecharge prepaymentRecharge)
    {
        List<PrepaymentRecharge> prepaymentRecharges = prepaymentRechargeMapper.selectPrepaymentRechargeList(prepaymentRecharge);
        for(PrepaymentRecharge pr : prepaymentRecharges){
            Long elderlyId = pr.getElderlyId();
            ElderlySzh elderlySzh = elderlySzhMapper.selectElderlySzhById(elderlyId);
            pr.setElderlySzh(elderlySzh);
            SysUser sysUser = sysUserMapper.selectUserById(pr.getOperator());
            pr.setSysUser(sysUser);
        }
        return prepaymentRecharges;
    }

    /**
     * 新增预存款充值
     * 
     * @param prepaymentRecharge 预存款充值
     * @return 结果
     */
    @Override
    public int insertPrepaymentRecharge(PrepaymentRecharge prepaymentRecharge)
    {
        // 1. 前缀：取当前日期的 年(后2位)+月+日（共4位，例如2024年10月20日 → "241020" 太长，优化为 "4102" → 年尾1位+月2位+日1位？不，重新调整）
        // 优化：取 月(2位)+日(2位) → 共4位（例如10月20日 → "1020"）
        SimpleDateFormat sdf = new SimpleDateFormat("MMdd"); // 格式：月(2位)+日(2位)
        String datePart = sdf.format(new Date()); // 4位：如"1020"（10月20日）

        // 2. 随机数：4位（0000-9999，共10000种可能）
        // 为降低冲突，可加同步锁或用ThreadLocalRandom
        String randomPart = String.format("%04d", new Random().nextInt(10000));

        // 拼接：4位日期 + 4位随机数 → 共8位
        prepaymentRecharge.setRechargeNo("PR"+datePart + randomPart);
        prepaymentRecharge.setCreateTime(DateUtils.getNowDate());
        return prepaymentRechargeMapper.insertPrepaymentRecharge(prepaymentRecharge);
    }

    /**
     * 修改预存款充值
     * 
     * @param prepaymentRecharge 预存款充值
     * @return 结果
     */
    @Override
    public int updatePrepaymentRecharge(PrepaymentRecharge prepaymentRecharge)
    {
        prepaymentRecharge.setUpdateTime(DateUtils.getNowDate());
        return prepaymentRechargeMapper.updatePrepaymentRecharge(prepaymentRecharge);
    }

    /**
     * 批量删除预存款充值
     * 
     * @param ids 需要删除的预存款充值主键
     * @return 结果
     */
    @Override
    public int deletePrepaymentRechargeByIds(Long[] ids)
    {
        return prepaymentRechargeMapper.deletePrepaymentRechargeByIds(ids);
    }

    /**
     * 删除预存款充值信息
     * 
     * @param id 预存款充值主键
     * @return 结果
     */
    @Override
    public int deletePrepaymentRechargeById(Long id)
    {
        return prepaymentRechargeMapper.deletePrepaymentRechargeById(id);
    }
}
